import pandas as pd
import numpy as np
import akshare as ak
from datetime import datetime, timedelta
import os

def get_maotai_data():
    """
    获取贵州茅台(600519)股票数据
    """
    try:
        # 使用akshare获取贵州茅台历史数据
        stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="600519", period="daily", 
                                               start_date="20100101", 
                                               end_date=datetime.now().strftime("%Y%m%d"),
                                               adjust="qfq")
        
        if stock_zh_a_hist_df.empty:
            print("未获取到数据，请检查网络连接或数据源")
            return None
            
        print(f"成功获取 {len(stock_zh_a_hist_df)} 条贵州茅台历史数据")
        return stock_zh_a_hist_df
        
    except Exception as e:
        print(f"获取数据时出错: {e}")
        return None

def format_for_mt5(data):
    """
    格式化数据为MT5兼容格式
    """
    if data is None:
        return None
    
    # 复制数据以避免修改原始数据
    df = data.copy()
    
    # 重命名列以符合MT5格式
    df.rename(columns={
        '日期': 'Date',
        '开盘': 'Open',
        '最高': 'High',
        '最低': 'Low',
        '收盘': 'Close',
        '成交量': 'Volume'
    }, inplace=True)
    
    # 确保日期格式正确 (MT5需要YYYY.MM.DD格式)
    df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%Y.%m.%d')
    
    # 添加时间列 (MT5需要时间，日线数据设为00:00:00)
    df['Time'] = '00:00:00'
    
    # 选择并重新排列列以符合MT5 CSV格式
    mt5_df = df[['Date', 'Time', 'Open', 'High', 'Low', 'Close', 'Volume']]
    
    # 确保数据按日期升序排列 (MT5要求)
    mt5_df = mt5_df.sort_values('Date')
    
    return mt5_df

def save_to_csv(data, filename=None):
    """
    保存数据为CSV文件
    """
    if data is None:
        return False
    
    if filename is None:
        filename = f"600519_D_{datetime.now().strftime('%Y%m%d')}.csv"
    
    try:
        # 保存为CSV，不包含索引和列名 (MT5要求)
        data.to_csv(filename, index=False, header=False)
        print(f"数据已保存到: {os.path.abspath(filename)}")
        return True
    except Exception as e:
        print(f"保存CSV文件时出错: {e}")
        return False

def main():
    print("开始获取贵州茅台(600519.SH)历史数据...")
    
    # 获取数据
    stock_data = get_maotai_data()
    
    if stock_data is not None:
        # 格式化数据为MT5兼容格式
        mt5_data = format_for_mt5(stock_data)
        
        if mt5_data is not None:
            # 保存为CSV文件
            success = save_to_csv(mt5_data, "600519.D.csv")
            
            if success:
                print("\nMT5导入说明:")
                print("1. 打开MT5终端")
                print("2. 点击菜单: 工具->历史数据中心")
                print("3. 在左侧列表中选择或创建一个新符号(如:600519)")
                print("4. 选择时间框架: 日线(Daily)")
                print("5. 点击'导入'按钮，选择生成的CSV文件")
                print("6. 导入后，在'市场报价'窗口中右键->符号，添加该符号")
                print("7. 现在您可以在策略测试器中使用该数据进行回测了")
            else:
                print("保存CSV文件失败")
        else:
            print("数据格式化失败")
    else:
        print("获取股票数据失败")

if __name__ == "__main__":
    main()